
package com.treasure.mall.zbq.common.oss;

import org.springframework.core.io.Resource;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.List;

/**
 * 静态资源服务
 *
 * @author guomw
 * @date 26/10/2017
 */
public interface ResourceService {
    /**
     * 上传资源
     *
     * @param path 相对路径
     * @param data 数据流
     * @return 新资源的资源定位符
     * @throws IOException
     */
    Resource upload(String path, InputStream data) throws IOException, URISyntaxException;

    /**
     * 获取指定资源的资源定位符
     *
     * @param path 资源路径（相对）
     * @return 资源实体
     */
    Resource get(String path) throws URISyntaxException;

    InputStream getInputStream(String url);

    String getUrl(String path);

    /**
     * 删除资源
     *
     * @param path 资源路径（相对）
     * @throws IOException 删除时错误
     */
    void delete(String path) throws IOException;

    /**
     * 批量下载为zip
     *
     * @param req      req
     * @param response response
     * @param keyList  oss文件路径集合,相对路径，不包含域名
     * @param fileName 下载出来的zip文件名（一般以合同名命名） 如：测试合同,zip
     */
    void downForZip(HttpServletRequest req, HttpServletResponse response,
                    List<String> keyList, String fileName);

    /**
     * 带进度条上传
     *
     * @param file    上传文件
     * @param path    文件路径
     * @param request 请求
     * @return
     */
    String uploadProgress(File file, String path, HttpServletRequest request);

    /**
     * 获取上传进度值，最高100 即100%
     *
     * @param request
     * @param path
     * @return
     */
    int getUploadPercent(HttpServletRequest request, String path);

    /**
     * 获取资源站域名
     * 在客户端多图脚本动态输出图的情况下，还是把域名扔到客户端，自己组装比较方便，纯服务端输出的话得准备一份原数据，一份加工数据
     * @return
     */
    String getResourceDomain();
}
